package com.mouse.jhttp.Proxy;

import lombok.Getter;
import net.sf.cglib.proxy.Enhancer;

@Getter
public class JHttp {
    private JHttpInterceptor interceptor = new JHttpInterceptor();
    //创建加强器，用来创建动态代理类
    private final static Enhancer enhancer = new Enhancer();

    public <T> T getRetain(Class<T> clas) {
        //为加强器指定要代理的业务类（即：为下面生成的代理类指定父类）
        enhancer.setSuperclass(clas);
        //设置回调：对于代理类上所有方法的调用，都会调用CallBack，而Callback则需要实现intercept()方法进行拦
        enhancer.setCallback(interceptor);
        // 创建动态代理类对象并返回
        return (T) enhancer.create();
    }

    /**
     * @param clas
     * @param <T>
     * @return
     */
    public static <T> T get(Class<T> clas) {
        //为加强器指定要代理的业务类（即：为下面生成的代理类指定父类）
        enhancer.setSuperclass(clas);
        //设置回调：对于代理类上所有方法的调用，都会调用CallBack，而Callback则需要实现intercept()方法进行拦
        enhancer.setCallback(new JHttpInterceptor());
        // 创建动态代理类对象并返回
        long t2 = System.currentTimeMillis();
        return (T) enhancer.create();
    }
}
